#include "w25q128.h"


void w25q128_init(void)
{
    spi_init();
}

uint8_t w25q128_swap_data(uint8_t data)
{
    uint8_t spi_rx = 0;
    HAL_SPI_TransmitReceive(&spi_handle, &data, &spi_rx, 1, 1000);
    return spi_rx;
}

uint8_t w25q128_get_sr1(void)
{
    uint8_t recv_data = 0;
    SPI_NSS(0);
    w25q128_swap_data(READ_SR1);
    recv_data = w25q128_swap_data(DUMMY_VALUE);
    SPI_NSS(1);
    return recv_data;
}

void w25q128_wait_busy(void)
{
    uint8_t sr1 = w25q128_get_sr1();
    while((sr1 & 0X01) == 0X01)
        sr1 = w25q128_get_sr1();
}

uint16_t w25q128_get_device_id(void)
{
    uint16_t device_id = 0;
//    w25q128_swap_data(WRITE_ENABLE);
//    w25q128_wait_busy();
    SPI_NSS(0);
    w25q128_swap_data(DEVICE_ID);
    w25q128_swap_data(0X00);
    w25q128_swap_data(0X00);
    w25q128_swap_data(0X00);
    device_id |= w25q128_swap_data(DUMMY_VALUE) << 8U ;
    device_id |= w25q128_swap_data(DUMMY_VALUE);
    SPI_NSS(1);
//    w25q128_swap_data(WRITE_DISABLE);
    
    return device_id;
}
